/**
 * ***************************************************************************** Copyright (c) 2003,
 * 2006 Subclipse project and others. All rights reserved. This program and the accompanying
 * materials are made available under the terms of the Eclipse Public License v1.0 which accompanies
 * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * <p>Contributors: Subclipse project committers - initial API and implementation
 * ****************************************************************************
 */
package org.tigris.subversion.subclipse.ui.comments;

import org.eclipse.core.resources.IResource;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.tigris.subversion.subclipse.ui.IHelpContextIds;
import org.tigris.subversion.subclipse.ui.Policy;

/** Prompts the user for a multi-line comment for releasing to SVN. */
public class ReleaseCommentDialog extends Dialog {

  CommitCommentArea commitCommentArea;

  /**
   * ReleaseCommentDialog constructor.
   *
   * @param parentShell the parent of this dialog
   */
  public ReleaseCommentDialog(Shell parentShell, IResource[] resourcesToCommit) {
    super(parentShell);
    int shellStyle = getShellStyle();
    setShellStyle(shellStyle | SWT.RESIZE);
    commitCommentArea = new CommitCommentArea(this, null);
  }

  /*
   * @see Dialog#createDialogArea(Composite)
   */
  protected Control createDialogArea(Composite parent) {
    getShell().setText(Policy.bind("ReleaseCommentDialog.title")); // $NON-NLS-1$
    Composite composite = new Composite(parent, SWT.NULL);
    composite.setLayout(new GridLayout());
    composite.setLayoutData(new GridData(GridData.FILL_BOTH));

    commitCommentArea.createArea(composite);
    commitCommentArea.addPropertyChangeListener(
        new IPropertyChangeListener() {
          public void propertyChange(PropertyChangeEvent event) {
            if (event.getProperty() == CommitCommentArea.OK_REQUESTED) okPressed();
          }
        });

    // set F1 help
    PlatformUI.getWorkbench()
        .getHelpSystem()
        .setHelp(composite, IHelpContextIds.RELEASE_COMMENT_DIALOG);

    return composite;
  }

  /**
   * Returns the comment.
   *
   * @return String
   */
  public String getComment() {
    commitCommentArea.addComment(commitCommentArea.getComment());
    return commitCommentArea.getComment();
  }
}
